package com.obaamilos.accesscontrol;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;

/**
 * @author Pedro R. Oliveira
 *
 */

public class ManutencaoGUI extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 206570301787353255L;

	private Manutencao meuAgente;
	
	private JTabbedPane tabbedPane;
	private JPanel pnlUsuarios;
	private JPanel pnlRecursos;
	private JPanel pnlPerfis;
	private JPanel pnlTesteAcesso;
	private DefaultListModel lstUsuariosModel, lstPerfisUsuarioModel, lstPerfisAAssociarModel;
	private DefaultListModel lstRecursosModel;
	private DefaultListModel lstPerfisModel, lstAcoesPerfilModel, lstRecursosAcaoModel;
	private DefaultListModel lstUsuariosTesteModel, lstRecursosTesteModel;
	private JTextField txtID, txtLogin, txtNome, txtSenha;  // Novo usu�rio
	private JTextField txtNomeRecurso;                      // Novo recurso
	private JTextField txtNomePerfil;                       // Novo perfil
	private JTextArea txtResposta;                          // Resposta do teste
	private JList lstUsuarios, lstPerfisUsuario, lstPerfisAAssociar;
	private JList lstRecursos;
	private JList lstPerfis, lstAcoesPerfil, lstRecursosAcao, lstAcoes;
	private JList lstUsuariosTeste, lstRecursosTeste;
	private JTextField txtLocalTDB;
	private JRadioButton rdbtnApplication;
	private JRadioButton rdbtnLearningObject;
	
	private boolean bIncluindo;
	
	private String retiraColchetes(String pStr) {
		String strRetorno = pStr.replace("[", "");
		strRetorno = strRetorno.replace("]", "");
		return(strRetorno);
	}

	public DefaultListModel getLstRecursosModel() {
		return lstRecursosModel;
	}

	public void setLstRecursosModel(DefaultListModel lstRecursosModel) {
		this.lstRecursosModel = lstRecursosModel;
	}

	public DefaultListModel getLstRecursosTesteModel() {
		return lstRecursosTesteModel;
	}

	public void setLstRecursosTesteModel(
			DefaultListModel lstRecursosTesteModel) {
		this.lstRecursosTesteModel = lstRecursosTesteModel;
	}

	public JList getLstRecursos() {
		return lstRecursos;
	}

	public void setLstRecursos(JList lstRecursos) {
		this.lstRecursos = lstRecursos;
	}

	public JList getLstRecursosTeste() {
		return lstRecursosTeste;
	}

	public void setLstRecursosTeste(JList lstRecursosTeste) {
		this.lstRecursosTeste = lstRecursosTeste;
	}

	public DefaultListModel getLstPerfisUsuarioModel() {
		return lstPerfisUsuarioModel;
	}

	public void setLstPerfisUsuarioModel(
			DefaultListModel lstPerfisUsuarioModel) {
		this.lstPerfisUsuarioModel = lstPerfisUsuarioModel;
	}

	public JList getLstPerfisUsuario() {
		return lstPerfisUsuario;
	}

	public boolean isbIncluindo() {
		return bIncluindo;
	}

	public void setbIncluindo(boolean bIncluindo) {
		this.bIncluindo = bIncluindo;
		if (!bIncluindo) {
			if (!lstUsuarios.isSelectionEmpty()) {
				String [] campos = lstUsuarios.getSelectedValue().toString().split(" - ");
				if (campos.length > 1) {
					meuAgente.atualizaListaPerfisUsuario(campos[1]);
				}
			}
		}
	}

	public void setLstPerfisUsuario(JList lstPerfisUsuario) {
		this.lstPerfisUsuario = lstPerfisUsuario;
	}

	public DefaultListModel getLstPerfisAAssociarModel() {
		return lstPerfisAAssociarModel;
	}

	public void setLstPerfisAAssociarModel(
			DefaultListModel lstPerfisAAssociarModel) {
		this.lstPerfisAAssociarModel = lstPerfisAAssociarModel;
	}

	public DefaultListModel getLstPerfisModel() {
		return lstPerfisModel;
	}

	public void setLstPerfisModel(DefaultListModel lstPerfisModel) {
		this.lstPerfisModel = lstPerfisModel;
	}

	public JList getLstPerfisAAssociar() {
		return lstPerfisAAssociar;
	}

	public void setLstPerfisAAssociar(JList lstPerfisAAssociar) {
		this.lstPerfisAAssociar = lstPerfisAAssociar;
	}

	public JList getLstPerfis() {
		return lstPerfis;
	}

	public void setLstPerfis(JList lstPerfis) {
		this.lstPerfis = lstPerfis;
	}

	public DefaultListModel getLstUsuariosModel() {
		return lstUsuariosModel;
	}

	public void setLstUsuariosModel(DefaultListModel lstUsuariosModel) {
		this.lstUsuariosModel = lstUsuariosModel;
	}

	public DefaultListModel getLstUsuariosTesteModel() {
		return lstUsuariosTesteModel;
	}

	public void setLstUsuariosTesteModel(
			DefaultListModel lstUsuariosTesteModel) {
		this.lstUsuariosTesteModel = lstUsuariosTesteModel;
	}

	public JList getLstUsuarios() {
		return lstUsuarios;
	}

	public void setLstUsuarios(JList lstUsuarios) {
		this.lstUsuarios = lstUsuarios;
	}

	public JList getLstUsuariosTeste() {
		return lstUsuariosTeste;
	}

	public void setLstUsuariosTeste(JList lstUsuariosTeste) {
		this.lstUsuariosTeste = lstUsuariosTeste;
	}

	public JTextField getTxtLocalTDB() {
		return txtLocalTDB;
	}

	public void setTxtLocalTDB(JTextField txtLocalTDB) {
		this.txtLocalTDB = txtLocalTDB;
	}
	
	public JTextField getTxtID() {
		return txtID;
	}

	public void setTxtID(JTextField txtID) {
		this.txtID = txtID;
	}

	public JTextField getTxtLogin() {
		return txtLogin;
	}

	public void setTxtLogin(JTextField txtLogin) {
		this.txtLogin = txtLogin;
	}

	public JTextField getTxtNome() {
		return txtNome;
	}

	public void setTxtNome(JTextField txtNome) {
		this.txtNome = txtNome;
	}

	public JTextField getTxtSenha() {
		return txtSenha;
	}

	public void setTxtSenha(JTextField txtSenha) {
		this.txtSenha = txtSenha;
	}
	
	ManutencaoGUI(Manutencao a) {
		
		meuAgente = a;
		
		setBounds(100, 100, 674, 443);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		
		tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		getContentPane().add(tabbedPane, BorderLayout.CENTER);

		pnlUsuarios = new JPanel();
		tabbedPane.addTab("Usuários", null, pnlUsuarios, null);
		pnlUsuarios.setLayout(null);

		pnlRecursos = new JPanel();
		tabbedPane.addTab("Recursos", null, pnlRecursos, null);
		pnlRecursos.setLayout(null);
		
		pnlPerfis = new JPanel();
		tabbedPane.addTab("Perfis", null, pnlPerfis, null);
		pnlPerfis.setLayout(null);
		
		pnlTesteAcesso = new JPanel();
		tabbedPane.addTab("Testes", null, pnlTesteAcesso, null);
		pnlTesteAcesso.setLayout(null);

		// Usu�rios
		JLabel lblUsuarios = new JLabel("Usuários:");
		lblUsuarios.setBounds(5, 11, 85, 14);
		pnlUsuarios.add(lblUsuarios);

		JScrollPane scpListaUsuarios = new JScrollPane();
		scpListaUsuarios.setBounds(5, 26, 312, 165);
		pnlUsuarios.add(scpListaUsuarios);

		lstUsuariosModel = new DefaultListModel();
		lstUsuarios = new JList(lstUsuariosModel);
		lstUsuarios.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent arg0) {
				// Obtem os perfis do usu�rio...
				if (!isbIncluindo()) {
					String [] campos = lstUsuarios.getSelectedValue().toString().split(" - ");
					if (campos.length > 1) {
						meuAgente.atualizaListaPerfisUsuario(campos[1]);
					}
				}
			}
		});
		
		lstUsuarios.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpListaUsuarios.setViewportView(lstUsuarios);
		
		JButton btnAtualizaListaUsuarios = new JButton("Atualizar Lista");
		btnAtualizaListaUsuarios.setFont(new Font("Dialog", Font.BOLD, 11));
		btnAtualizaListaUsuarios.setBounds(15, 196, 130, 24);
		btnAtualizaListaUsuarios.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				meuAgente.atualizaListaUsuarios();
			}
		});
		
		pnlUsuarios.add(btnAtualizaListaUsuarios);
		
		JButton btnExcluirUsuario = new JButton("Excluir");
		btnExcluirUsuario.setFont(new Font("Dialog", Font.BOLD, 11));
		btnExcluirUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!lstUsuarios.isSelectionEmpty()) {
					String [] campos = lstUsuarios.getSelectedValue().toString().split(" - ");
					meuAgente.excluirUsuario(campos[1]);
				}
			}
		});
		btnExcluirUsuario.setBounds(171, 196, 130, 24);
		pnlUsuarios.add(btnExcluirUsuario);
		
		// Painel novo usu�rio
		JLabel lblNovoUsurio = new JLabel("Novo Usuário");
		lblNovoUsurio.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblNovoUsurio.setHorizontalAlignment(SwingConstants.CENTER);
		lblNovoUsurio.setBounds(340, 30, 293, 14);
		pnlUsuarios.add(lblNovoUsurio);
		JPanel pnlNovoUsuario = new JPanel();
		pnlNovoUsuario.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
		pnlNovoUsuario.setBounds(340, 50, 293, 141);
		pnlUsuarios.add(pnlNovoUsuario);
		pnlNovoUsuario.setLayout(null);
		JLabel lblId = new JLabel("ID:");
		lblId.setHorizontalAlignment(SwingConstants.TRAILING);
		lblId.setBounds(29, 10, 50, 14);
		pnlNovoUsuario.add(lblId);
		JLabel lblLogin = new JLabel("Login:");
		lblLogin.setHorizontalAlignment(SwingConstants.TRAILING);
		lblLogin.setBounds(29, 34, 50, 14);
		pnlNovoUsuario.add(lblLogin);
		JLabel lblNome = new JLabel("Nome:");
		lblNome.setHorizontalAlignment(SwingConstants.TRAILING);
		lblNome.setBounds(29, 58, 50, 14);
		pnlNovoUsuario.add(lblNome);
		JLabel lblSenha = new JLabel("Senha:");
		lblSenha.setHorizontalAlignment(SwingConstants.TRAILING);
		lblSenha.setBounds(29, 82, 50, 14);
		pnlNovoUsuario.add(lblSenha);
		txtID = new JTextField();
		txtID.setBounds(89, 7, 175, 20);
		txtID.setColumns(10);
		pnlNovoUsuario.add(txtID);
		txtLogin = new JTextField();
		txtLogin.setBounds(89, 31, 175, 20);
		txtLogin.setColumns(10);
		pnlNovoUsuario.add(txtLogin);
		txtNome = new JTextField();
		txtNome.setBounds(89, 55, 175, 20);
		txtNome.setColumns(10);
		pnlNovoUsuario.add(txtNome);
		txtSenha = new JTextField();
		txtSenha.setBounds(89, 79, 175, 20);
		txtSenha.setColumns(10);
		pnlNovoUsuario.add(txtSenha);
		
		JButton btnIncluirNovoUsuario = new JButton("<<-- Incluir");
		btnIncluirNovoUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				meuAgente.incluirUsuario();
			}
		});
		btnIncluirNovoUsuario.setBounds(89, 106, 175, 24);
		pnlNovoUsuario.add(btnIncluirNovoUsuario);

		// Perfis do usu�rio
		JLabel lblPerfil = new JLabel("Perfil Usuário:");
		lblPerfil.setFont(new Font("Dialog", Font.BOLD, 11));
		lblPerfil.setBounds(5, 236, 120, 14);
		pnlUsuarios.add(lblPerfil);
		
		JScrollPane scpListaPerfisUsu = new JScrollPane();
		scpListaPerfisUsu.setBounds(5, 252, 170, 117);
		pnlUsuarios.add(scpListaPerfisUsu);
		
		lstPerfisUsuarioModel = new DefaultListModel();
		lstPerfisUsuario = new JList(lstPerfisUsuarioModel);
		lstPerfisUsuario.setFont(new Font("Dialog", Font.BOLD, 11));
		lstPerfisUsuario.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpListaPerfisUsu.setViewportView(lstPerfisUsuario);
		
		JButton btnAtualizaListaPerfisUsu = new JButton("Atualizar Lista");
		btnAtualizaListaPerfisUsu.setFont(new Font("Dialog", Font.BOLD, 10));
		btnAtualizaListaPerfisUsu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// Obtem os perfis do usu�rio...
				String [] campos = lstUsuarios.getSelectedValue().toString().split(" - ");
				if (campos.length > 1)
					meuAgente.atualizaListaPerfisUsuario(campos[1]);
			}
		});
		btnAtualizaListaPerfisUsu.setBounds(181, 321, 120, 24);
		pnlUsuarios.add(btnAtualizaListaPerfisUsu);
		
		JButton btnExcluirPerfilUsuario = new JButton("Excluir Perfil");
		btnExcluirPerfilUsuario.setFont(new Font("Dialog", Font.BOLD, 10));
		btnExcluirPerfilUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// Obtem o usu�rio...
				String [] campos = lstUsuarios.getSelectedValue().toString().split(" - ");
				if (campos.length > 1) {
					if (!lstPerfisUsuario.isSelectionEmpty()) {
						String mPerfil = retiraColchetes(lstPerfisUsuario.getSelectedValue().toString());
						if (mPerfil.length() > 1) {
							meuAgente.excluirPerfilUsuario(campos[1], mPerfil);
						}
					}
				}
			}
		});
		btnExcluirPerfilUsuario.setBounds(181, 346, 120, 24);
		pnlUsuarios.add(btnExcluirPerfilUsuario);
		
		// Perfis a associar
		JPanel panel_3 = new JPanel();
		panel_3.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
		panel_3.setBounds(311, 218, 322, 152);
		pnlUsuarios.add(panel_3);
		panel_3.setLayout(null);
		
		JLabel label_1 = new JLabel("Perfis:");
		label_1.setBounds(10, 5, 62, 14);
		panel_3.add(label_1);
		
		JScrollPane scrollPane_6 = new JScrollPane();
		scrollPane_6.setBounds(10, 20, 302, 97);
		panel_3.add(scrollPane_6);

		lstPerfisAAssociarModel = new DefaultListModel();
		lstPerfisAAssociar = new JList(lstPerfisAAssociarModel);
		scrollPane_6.setViewportView(lstPerfisAAssociar);
		
		JButton btnAssociarPerfilUsuario = new JButton("<<-- Incluir");
		btnAssociarPerfilUsuario.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// Se existe perfil e usu�rio, inclui o perfil ao usu�rio
				String [] campos = lstUsuarios.getSelectedValue().toString().split(" - ");
				if (campos.length > 1) {
					String mPerfil = retiraColchetes(lstPerfisAAssociar.getSelectedValue().toString());
				 	if (mPerfil.length() > 1) {
				 		meuAgente.associaPerfilUsuario(campos[1], mPerfil);
				 	}
				}
			}
		});
		btnAssociarPerfilUsuario.setBounds(10, 123, 302, 24);
		panel_3.add(btnAssociarPerfilUsuario);

		// Recursos
		JLabel lblRecursos = new JLabel("Recursos:");
		lblRecursos.setBounds(10, 11, 71, 14);
		pnlRecursos.add(lblRecursos);
		
		JScrollPane scpListaRecursos = new JScrollPane();
		scpListaRecursos.setBounds(10, 25, 350, 176);
		pnlRecursos.add(scpListaRecursos);
		
		lstRecursosModel = new DefaultListModel();
		lstRecursos = new JList(lstRecursosModel);
		lstRecursos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpListaRecursos.setViewportView(lstRecursos);
		
		JButton btnAtualizaRecursos = new JButton("Atualizar Lista");
		btnAtualizaRecursos.setFont(new Font("Dialog", Font.BOLD, 10));
		btnAtualizaRecursos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				meuAgente.atualizaRecursos();
			}
		});
		btnAtualizaRecursos.setBounds(10, 206, 120, 24);
		pnlRecursos.add(btnAtualizaRecursos);
		
		JButton btnExcluirRecurso = new JButton("Excluir");
		btnExcluirRecurso.setFont(new Font("Dialog", Font.BOLD, 10));
		btnExcluirRecurso.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!lstRecursos.isSelectionEmpty()) {
					String mRecurso = retiraColchetes(lstRecursos.getSelectedValue().toString());
					String [] mSepara = mRecurso.split(" - ");
					if (mSepara.length > 1) {
						meuAgente.excluirRecurso(mSepara[1].trim());
					}
				}
			}
		});
		btnExcluirRecurso.setBounds(240, 206, 120, 24);
		pnlRecursos.add(btnExcluirRecurso);

		// Painel novo recurso
		JLabel lblNovoRecurso = new JLabel("Novo Recurso");
		lblNovoRecurso.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblNovoRecurso.setHorizontalAlignment(SwingConstants.CENTER);
		lblNovoRecurso.setBounds(370, 26, 281, 14);
		pnlRecursos.add(lblNovoRecurso);
		
		JPanel pnlNovoRecurso = new JPanel();
		pnlNovoRecurso.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
		pnlNovoRecurso.setBounds(370, 51, 281, 98);
		pnlRecursos.add(pnlNovoRecurso);
		pnlNovoRecurso.setLayout(null);
		
		rdbtnApplication = new JRadioButton("Application");
		rdbtnApplication.setFont(new Font("Dialog", Font.BOLD, 11));
		rdbtnApplication.setSelected(true);
		rdbtnApplication.setLocation(29, 8);
		rdbtnApplication.setSize(109, 23);
		rdbtnApplication.setSelected(true);
		pnlNovoRecurso.add(rdbtnApplication);
		rdbtnLearningObject = new JRadioButton("Learning Object");
		rdbtnLearningObject.setFont(new Font("Dialog", Font.BOLD, 11));
		rdbtnLearningObject.setLocation(140, 8);
		rdbtnLearningObject.setSize(135, 23);
		pnlNovoRecurso.add(rdbtnLearningObject);
		ButtonGroup bgrupo = new ButtonGroup();
		bgrupo.add(rdbtnApplication);
		bgrupo.add(rdbtnLearningObject);
		
		JLabel lblNome_1 = new JLabel("Nome:");
		lblNome_1.setLocation(0, 42);
		lblNome_1.setSize(53, 14);
		lblNome_1.setHorizontalAlignment(SwingConstants.TRAILING);
		pnlNovoRecurso.add(lblNome_1);
		
		txtNomeRecurso = new JTextField();
		txtNomeRecurso.setLocation(57, 39);
		txtNomeRecurso.setSize(214, 20);
		pnlNovoRecurso.add(txtNomeRecurso);
		txtNomeRecurso.setColumns(10);
		
		JButton btnIncluirRecurso = new JButton("<<-- Incluir");
		btnIncluirRecurso.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (rdbtnApplication.isSelected()) {
					meuAgente.incluirRecurso("Application");
				}
				else {
					meuAgente.incluirRecurso("Learning_Object");
				}
			}
		});
		btnIncluirRecurso.setLocation(57, 67);
		btnIncluirRecurso.setSize(214, 24);
		pnlNovoRecurso.add(btnIncluirRecurso);
		
		// Perfis
		JLabel lblPerfis = new JLabel("Perfis:");
		lblPerfis.setBounds(10, 11, 71, 14);
		pnlPerfis.add(lblPerfis);
		JScrollPane scpListaPerfis = new JScrollPane();
		scpListaPerfis.setBounds(10, 25, 244, 176);
		pnlPerfis.add(scpListaPerfis);
		lstPerfisModel = new DefaultListModel();
		lstPerfis = new JList(lstPerfisModel);
		lstPerfis.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent arg0) {
				// Obtem as acoes do perfil...
				if (!lstPerfis.isSelectionEmpty()) {
					String mAcesso = retiraColchetes(lstPerfis.getSelectedValue().toString());
					meuAgente.atualizaAcoesPerfil(mAcesso);;
				}
			}
		});
		lstPerfis.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpListaPerfis.setViewportView(lstPerfis);
		JButton btnAtualizarListaPerfis = new JButton("Atualizar Lista");
		btnAtualizarListaPerfis.setFont(new Font("Dialog", Font.BOLD, 10));
		btnAtualizarListaPerfis.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				meuAgente.atualizaListaPerfis();
			}
		});
		btnAtualizarListaPerfis.setBounds(10, 206, 120, 24);
		pnlPerfis.add(btnAtualizarListaPerfis);
		JButton btnExcluirPerfil = new JButton("Excluir");
		btnExcluirPerfil.setFont(new Font("Dialog", Font.BOLD, 10));
		btnExcluirPerfil.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				// Excluir um perfil
				if (!lstPerfis.isSelectionEmpty()) {
					String mPerfil = retiraColchetes(lstPerfis.getSelectedValue().toString());
					meuAgente.excluirAcesso(mPerfil);
					meuAgente.atualizaListaPerfis();
				}
			}
		});
		btnExcluirPerfil.setBounds(134, 206, 120, 24);
		pnlPerfis.add(btnExcluirPerfil);
		
		JLabel lblAcoes = new JLabel("Ação:");
		lblAcoes.setBounds(10, 240, 85, 14);
		pnlPerfis.add(lblAcoes);
		JScrollPane scpListaAcoes = new JScrollPane();
		scpListaAcoes.setBounds(10, 256, 244, 86);
		pnlPerfis.add(scpListaAcoes);
		lstAcoesPerfilModel = new DefaultListModel();
		lstAcoesPerfil = new JList(lstAcoesPerfilModel);
		lstAcoesPerfil.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpListaAcoes.setViewportView(lstAcoesPerfil);
		JButton btnAtualizaListaAcoesPerfil = new JButton("Atualizar Lista");
		btnAtualizaListaAcoesPerfil.setFont(new Font("Dialog", Font.BOLD, 10));
		btnAtualizaListaAcoesPerfil.setBounds(10, 347, 120, 24);
		pnlPerfis.add(btnAtualizaListaAcoesPerfil);
		JButton btnExcluirAcaoPerfil = new JButton("Excluir Ação");
		btnExcluirAcaoPerfil.setFont(new Font("Dialog", Font.BOLD, 10));
		btnExcluirAcaoPerfil.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!lstPerfis.isSelectionEmpty() && !lstAcoesPerfil.isSelectionEmpty()) {
					String mPerfil = retiraColchetes(lstPerfis.getSelectedValue().toString());
					String mAcoesPerfil = retiraColchetes(lstAcoesPerfil.getSelectedValue().toString());
					String [] RecursoAcao = mAcoesPerfil.split(" - ");
					if (RecursoAcao.length > 1) {
						meuAgente.excluirRecursoAcaodePerfil(mPerfil, RecursoAcao[0], RecursoAcao[1]);
					}
				}
			}
		});
		btnExcluirAcaoPerfil.setBounds(134, 347, 120, 24);
		pnlPerfis.add(btnExcluirAcaoPerfil);

		JLabel lblNewLabel_1 = new JLabel("Novo Perfil");
		lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD, 12));
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel_1.setBounds(264, 26, 387, 14);
		pnlPerfis.add(lblNewLabel_1);
		JPanel panel_2 = new JPanel();
		panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
		panel_2.setBounds(264, 51, 387, 64);
		pnlPerfis.add(panel_2);
		panel_2.setLayout(null);
		JLabel lblNomePerfil = new JLabel("Nome Perfil:");
		lblNomePerfil.setHorizontalAlignment(SwingConstants.TRAILING);
		lblNomePerfil.setBounds(10, 10, 90, 14);
		panel_2.add(lblNomePerfil);
		txtNomePerfil = new JTextField();
		txtNomePerfil.setBounds(105, 7, 201, 20);
		panel_2.add(txtNomePerfil);
		txtNomePerfil.setColumns(10);
		JButton btnIncluirPerfil = new JButton("<< -- Incluir");
		btnIncluirPerfil.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				meuAgente.incluirPerfil();
			}
		});
		btnIncluirPerfil.setBounds(105, 34, 201, 24);
		panel_2.add(btnIncluirPerfil);

		JPanel panel_1 = new JPanel();
		panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
		panel_1.setBounds(264, 194, 387, 176);
		pnlPerfis.add(panel_1);
		panel_1.setLayout(null);
		JLabel label = new JLabel("Recursos:");
		label.setFont(new Font("Dialog", Font.BOLD, 10));
		label.setBounds(10, 5, 71, 14);
		panel_1.add(label);
		JScrollPane scpRecursosAAssociar = new JScrollPane();
		scpRecursosAAssociar.setBounds(10, 20, 293, 125);
		panel_1.add(scpRecursosAAssociar);
		lstRecursosAcaoModel = new DefaultListModel();
		lstRecursosAcao = new JList(lstRecursosAcaoModel);
		lstRecursosAcao.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpRecursosAAssociar.setViewportView(lstRecursosAcao);
		JLabel lblNewLabel = new JLabel("Ação:");
		lblNewLabel.setFont(new Font("Dialog", Font.BOLD, 10));
		lblNewLabel.setBounds(313, 5, 46, 14);
		panel_1.add(lblNewLabel);
		lstAcoes = new JList();
		lstAcoes.setFont(new Font("Dialog", Font.BOLD, 11));
		lstAcoes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		lstAcoes.setModel(new AbstractListModel() {
			String[] values = new String[] {"Control", "Read", "Write", "Delete", "Execute"};
			public int getSize() {
				return values.length;
			}
			public Object getElementAt(int index) {
				return values[index];
			}
		});
		lstAcoes.setSelectedIndex(0);
		lstAcoes.setBounds(313, 20, 64, 125);
		panel_1.add(lstAcoes);
		JButton btnCriaAcaoPerfil = new JButton("<<-- Incluir Ação");
		btnCriaAcaoPerfil.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!lstPerfis.isSelectionEmpty()) {
					String mAcesso = retiraColchetes(lstPerfis.getSelectedValue().toString());
					if (!lstRecursosAcao.isSelectionEmpty()) {
						String mRecurso = retiraColchetes(lstRecursosAcao.getSelectedValue().toString());
						if (mRecurso.contains(" - ")) {
							String [] mItens = mRecurso.split(" - ");
							mRecurso = mItens[1].trim();
						}
						if (!lstAcoes.isSelectionEmpty()) {
							String mAcao = lstAcoes.getSelectedValue().toString().trim();
							meuAgente.incluirRecursoAcaoemPerfil(mAcesso, mRecurso, mAcao);
						}
					}
				}
			}
		});
		btnCriaAcaoPerfil.setBounds(10, 149, 367, 24);
		panel_1.add(btnCriaAcaoPerfil);
		
		// Testes
		JLabel lblUsurios = new JLabel("Usuários:");
		lblUsurios.setBounds(10, 11, 85, 14);
		pnlTesteAcesso.add(lblUsurios);
		JLabel label_3 = new JLabel("Recursos:");
		label_3.setBounds(221, 11, 71, 14);
		pnlTesteAcesso.add(label_3);
		JLabel lblAo = new JLabel("Ação:");
		lblAo.setBounds(562, 11, 46, 14);
		pnlTesteAcesso.add(lblAo);
		JLabel lblResposta = new JLabel("Resposta:");
		lblResposta.setBounds(10, 232, 85, 14);
		pnlTesteAcesso.add(lblResposta);
		JScrollPane scpTesteUsuario = new JScrollPane();
		scpTesteUsuario.setBounds(10, 26, 201, 165);
		pnlTesteAcesso.add(scpTesteUsuario);
		lstUsuariosTesteModel = new DefaultListModel();
		lstUsuariosTeste = new JList(lstUsuariosTesteModel);
		lstUsuariosTeste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpTesteUsuario.setViewportView(lstUsuariosTeste);
		JScrollPane scpTesteRecurso = new JScrollPane();
		scpTesteRecurso.setBounds(221, 26, 331, 165);
		pnlTesteAcesso.add(scpTesteRecurso);
		lstRecursosTesteModel = new DefaultListModel();
		lstRecursosTeste = new JList(lstRecursosTesteModel);
		lstRecursosTeste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpTesteRecurso.setViewportView(lstRecursosTeste);
		JList lstAcoesTeste = new JList();
		lstAcoesTeste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		lstAcoesTeste.setModel(new AbstractListModel() {
			String[] values = new String[] {"Control", "Read", "Write", "Delete", "Execute"};
			public int getSize() {
				return values.length;
			}
			public Object getElementAt(int index) {
				return values[index];
			}
		});
		lstAcoesTeste.setSelectedIndex(0);
		lstAcoesTeste.setBounds(562, 26, 71, 90);
		pnlTesteAcesso.add(lstAcoesTeste);

		JButton btnSolicitarAcesso = new JButton("Solicitar Acesso");
		btnSolicitarAcesso.setBounds(10, 198, 542, 24);
		pnlTesteAcesso.add(btnSolicitarAcesso);
		
		txtResposta = new JTextArea();
		txtResposta.setBounds(10, 248, 412, 122);
		pnlTesteAcesso.add(txtResposta);
		
		JLabel lblLocalTdb = new JLabel("Local TDB:");
		lblLocalTdb.setBounds(432, 232, 71, 14);
		pnlTesteAcesso.add(lblLocalTdb);
		
		txtLocalTDB = new JTextField();
		txtLocalTDB.setText("../../TDBTESTE/TDB1");
		txtLocalTDB.setBounds(432, 250, 201, 20);
		pnlTesteAcesso.add(txtLocalTDB);
		txtLocalTDB.setColumns(10);
		
		// Encerra o Agente de manuten��o quando usu�rio fecha o Frame	
		addWindowListener(new	WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				meuAgente.doDelete();
			}
		} );
	}
	
	public DefaultListModel getLstAcoesPerfilModel() {
		return lstAcoesPerfilModel;
	}

	public void setLstAcoesPerfilModel(DefaultListModel lstAcoesPerfilModel) {
		this.lstAcoesPerfilModel = lstAcoesPerfilModel;
	}

	public JList getLstAcoesPerfil() {
		return lstAcoesPerfil;
	}

	public void setLstAcoesPerfil(JList lstAcoesPerfil) {
		this.lstAcoesPerfil = lstAcoesPerfil;
	}

	public JTextField getTxtNomePerfil() {
		return txtNomePerfil;
	}

	public void setTxtNomePerfil(JTextField txtNomePerfil) {
		this.txtNomePerfil = txtNomePerfil;
	}

	public DefaultListModel getLstRecursosAcaoModel() {
		return lstRecursosAcaoModel;
	}

	public void setLstRecursosAcaoModel(
			DefaultListModel lstRecursosAcaoModel) {
		this.lstRecursosAcaoModel = lstRecursosAcaoModel;
	}

	public JList getLstRecursosAcao() {
		return lstRecursosAcao;
	}

	public void setLstRecursosAcao(JList lstRecursosAcao) {
		this.lstRecursosAcao = lstRecursosAcao;
	}

	public JTextField getTxtNomeRecurso() {
		return txtNomeRecurso;
	}

	public void setTxtNomeRecurso(JTextField txtNomeRecurso) {
		this.txtNomeRecurso = txtNomeRecurso;
	}

	public void setTxtResposta(String p_resposta) {
		txtResposta.setText(p_resposta);
	}
	
	public void showGui() {
		//pack();
		setSize(674, 443);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int centerX = (int)screenSize.getWidth() / 2;
		int centerY = (int)screenSize.getHeight() / 2;
		setLocation(centerX - 674 / 2, centerY - 443 / 2);
		super.setVisible(true);
	}
}
